home *** CD-ROM | disk | FTP | other *** search
/ Delphi Informant Complete 1995 - 2000 / Delphi Informant Complete 1995 to 2000.iso / Delphi Informant Magazine Complete Works SOURCE CODE 1995.rar / 1995 / SEP / RH9509 / EXAMPLE2 / MAIN.PAS < prev    next >
Pascal/Delphi Source File  |  1995-08-15  |  6KB  |  167 lines

  1. unit Main;   { Example 2 -- How to use class TProfilingStopWatch. }
  2.  
  3. interface
  4.  
  5. uses
  6.   SysUtils, WinTypes, WinProcs, Messages, Classes, Graphics, Controls,
  7.   Forms, Dialogs, StdCtrls, StpWatch, VTimerDv;
  8.  
  9. type
  10.   TMainFrm = class(TForm)
  11.     { Non-Visual components }
  12.     ProfilingStopWatch1: TProfilingStopWatch;
  13.     ProfilingStopWatch2: TProfilingStopWatch;
  14.     ProfilingStopWatch3: TProfilingStopWatch;
  15.     ProfilingStopWatch4: TProfilingStopWatch;
  16.     { Visual components }
  17.     RunBtn:           TButton;
  18.     RecalibrateBtn:   TButton;
  19.     SetOverheadBtn:   TButton;
  20.     IterationsEbx:    TEdit;
  21.     StopOverheadEbx:  TEdit;
  22.     SplitOverheadEbx: TEdit;
  23.     TotalTimeLbl:     TLabel;
  24.     TotalPctLbl:      TLabel;
  25.     EmptyTimeLbl:     TLabel;
  26.     EmptyPctLbl:      TLabel;
  27.     SplitTimeLbl:     TLabel;
  28.     SplitPctLbl:      TLabel;
  29.     WorkTimeLbl:      TLabel;
  30.     WorkPctLbl:       TLabel;
  31.     OverheadLbl:      TLabel;
  32.     OverheadPctLbl:   TLabel;
  33.     RemainderLbl:     TLabel;
  34.     RemainderPctLbl:  TLabel;
  35.     StopOverheadLbl:  TLabel;
  36.     SplitOverheadLbl: TLabel;
  37.     Label1:  TLabel;
  38.     Label2:  TLabel;
  39.     Label3:  TLabel;
  40.     Label4:  TLabel;
  41.     Label5:  TLabel;
  42.     Label6:  TLabel;
  43.     Label7:  TLabel;
  44.     Label8:  TLabel;
  45.     Label9:  TLabel;
  46.     Label10: TLabel;
  47.     Label11: TLabel;
  48.     { Methods }
  49.     procedure FormActivate(Sender: TObject);
  50.     procedure RunBtn_Click(Sender: TObject);
  51.     procedure RecalibrateBtn_Click(Sender: TObject);
  52.     procedure SetOverheadBtn_Click(Sender: TObject);
  53.   private
  54.     { Private declarations }
  55.   public
  56.     { Public declarations }
  57.   end;
  58.  
  59. var
  60.   MainFrm: TMainFrm;
  61.  
  62. implementation
  63.  
  64. {$R *.DFM}
  65.  
  66. procedure TMainFrm.FormActivate(Sender: TObject);
  67. begin
  68.   IterationsEbx.Text    := '10';
  69.   StopOverheadEbx.Text  := FormatFloat('0.0000000',TProfilingStopWatch.GetOverheadForStop);
  70.   SplitOverheadEbx.Text := FormatFloat('0.0000000',TProfilingStopWatch.GetOverheadForSplit);
  71.   RunBtn.SetFocus;
  72.   RunBtn_Click(self);
  73. end;
  74.  
  75. procedure TMainFrm.RunBtn_Click(Sender: TObject);
  76. var
  77.   i,j,NumIterations,NumInnerStops,NumInnerSplits: longint;
  78.   x,TotalTime,EmptyTime,WorkTime,Overhead,Remainder,SplitTime: double;
  79. begin
  80.   NumIterations := StrToInt(IterationsEbx.Text);
  81.  
  82.   ProfilingStopWatch1.Reset;
  83.   ProfilingStopWatch2.Reset;
  84.   ProfilingStopWatch3.Reset;
  85.   ProfilingStopWatch4.Reset;
  86.   NumInnerStops  := 0;
  87.   NumInnerSplits := 0;
  88.  
  89.   { Start the overall timer. }
  90.   ProfilingStopWatch1.Start;
  91.  
  92.   { The "empty" loop }
  93.   for i := 1 to NumIterations do
  94.     begin
  95.     ProfilingStopWatch2.Start;
  96.     ProfilingStopWatch2.Stop;
  97.     NumInnerStops := NumInnerStops + 2;
  98.     end;
  99.  
  100.   { The "split" loop }
  101.   ProfilingStopWatch3.Start;
  102.   for i := 1 to NumIterations do
  103.     SplitTime := ProfilingStopWatch3.ElapsedTime;  { Get split time }
  104.   ProfilingStopWatch3.Stop;
  105.   inc(NumInnerStops);
  106.   NumInnerSplits := NumInnerSplits + NumIterations;
  107.  
  108.   { The "work" loop }
  109.   ProfilingStopWatch4.Start;
  110.   inc(NumInnerStops);
  111.   x := 1.0;
  112.   for i := 1 to NumIterations do
  113.     for j := 1 to i do
  114.       begin
  115.       x := sqrt(x);
  116.       x := ln(x);
  117.       x := exp(x);
  118.       x := x * x;
  119.       end;
  120.   ProfilingStopWatch4.Stop;
  121.   inc(NumInnerStops);
  122.  
  123.   { Stop the overall timer. }
  124.   ProfilingStopWatch1.Stop;
  125.  
  126.   { Format and display the results. }
  127.   TotalTime := ProfilingStopWatch1.ElapsedTime;
  128.   EmptyTime := ProfilingStopWatch2.ElapsedTime;
  129.   SplitTime := ProfilingStopWatch3.ElapsedTime;
  130.   WorkTime  := ProfilingStopWatch4.ElapsedTime;
  131.   Overhead  := NumInnerStops*TProfilingStopWatch.GetOverheadForStop
  132.              + NumInnerSplits*TProfilingStopWatch.GetOverheadForSplit;
  133.   Remainder := TotalTime - EmptyTime - SplitTime - WorkTime - Overhead;
  134.  
  135.   TotalTimeLbl.Caption     := FormatFloat('0.000000',TotalTime);
  136.   EmptyTimeLbl.Caption     := FormatFloat('0.000000',EmptyTime);
  137.   SplitTimeLbl.Caption     := FormatFloat('0.000000',SplitTime);
  138.   WorkTimeLbl.Caption      := FormatFloat('0.000000',WorkTime);
  139.   OverheadLbl.Caption      := FormatFloat('0.000000',Overhead);
  140.   RemainderLbl.Caption     := FormatFloat('0.000000',Remainder);
  141.   TotalPctLbl.Caption      := '100.00';
  142.   EmptyPctLbl.Caption      := FormatFloat('0.00',100.0*EmptyTime/TotalTime);
  143.   SplitPctLbl.Caption      := FormatFloat('0.00',100.0*SplitTime/TotalTime);
  144.   WorkPctLbl.Caption       := FormatFloat('0.00',100.0*WorkTime/TotalTime);
  145.   OverheadPctLbl.Caption   := FormatFloat('0.00',100.0*Overhead/TotalTime);
  146.   RemainderPctLbl.Caption  := FormatFloat('0.00',100.0*Remainder/TotalTime);
  147.   StopOverheadLbl.Caption  := FormatFloat('0.0000000',TProfilingStopWatch.GetOverheadForStop);
  148.   SplitOverheadLbl.Caption := FormatFloat('0.0000000',TProfilingStopWatch.GetOverheadForSplit);
  149. end;
  150.  
  151. procedure TMainFrm.SetOverheadBtn_Click(Sender: TObject);
  152. begin
  153.   TProfilingStopWatch.SetOverheadForStop(StrToFloat(StopOverheadEbx.Text));
  154.   TProfilingStopWatch.SetOverheadForSplit(StrToFloat(SplitOverheadEbx.Text));
  155.   StopOverheadLbl.Caption  := FormatFloat('0.0000000',TProfilingStopWatch.GetOverheadForStop);
  156.   SplitOverheadLbl.Caption := FormatFloat('0.0000000',TProfilingStopWatch.GetOverheadForSplit);
  157. end;
  158.  
  159. procedure TMainFrm.RecalibrateBtn_Click(Sender: TObject);
  160. begin
  161.   TProfilingStopWatch.CalibrateOverhead;
  162.   StopOverheadLbl.Caption  := FormatFloat('0.0000000',TProfilingStopWatch.GetOverheadForStop);
  163.   SplitOverheadLbl.Caption := FormatFloat('0.0000000',TProfilingStopWatch.GetOverheadForSplit);
  164. end;
  165.  
  166. end.
  167.